%pylab inline
#import matplotlib.pyplot as plt
# a szinekhez tartozo toroesmutatok:
nred = 1.33; ngreen = 1.335; nblue = 1.34;
# 'r' ---> red, 'g' ---> green, 'b' ---> blue
nszinek = {"r":nred, "g":ngreen, "b":nblue} # dictionary type variable
nszinek['b']
Bram de Greve: Reflections and Refractions in Ray Tracing (2006)
Input: $ \mathbf{i}, \mathbf{N}$ és $n_1, n_2$.
Output (az alábbiak szerint számított): $ \mathbf{r}, \mathbf{t}$
\begin{eqnarray} \mathbf{r} &=& \mathbf{i} \left[\mathbf{1}- 2 \mathbf{N}\circ\mathbf{N} \right] = \mathbf{i} - 2 \left( \mathbf{i} \mathbf{N} \right) \mathbf{N} \nonumber \\ n_2 \mathbf{t} &=& n_1 \mathbf{i} + \mathbf{N}\left(n_1 \cos\vartheta_1 -n_2 \cos\vartheta_2 \right), \,\, \textrm{ahol} \nonumber \\ \cos \vartheta_1 &=& - \mathbf{i N}, \nonumber \\ n_1 \sin \vartheta_1 &=& n_2 \sin \vartheta_2 \nonumber . \end{eqnarray}def SD(n2,n1,be,normal):
'''
Snellius-Descartes-torveny: torestorveny,
a t vektor szamolasa adott i es N vektorok eseten (mindegyik egysegvektor!!!)
'''
cos1=-dot(be,normal)
sin1= sqrt(1-cos1**2)
sin2= n1*sin1/n2
cos2=sqrt(1-sin2**2)
tv=n1/n2*be+(n1/n2*cos1-cos2)*normal
return(tv)
def line_circle(r0,be,cent,R):
'''
a kor es az egyenes metszespontjat szamolja
r0 =(x0,y0) az egyenes egy pontja
be: az egyenes iranyvektora (unit vector!)
cent: a kor kozeppontja
R: a kor sugara, R>0, ha (, es R<0, ha )
'''
cr=cent-r0
l= dot(cr,be)
cr3=array([cr[0],cr[1],0])
be3=array([be[0],be[1],0])
rhovec=cross(cr3,be3)
rho= sqrt(dot(rhovec,rhovec))
s= sqrt(R**2-rho**2)
# sign(R) eldonti, hogy a ket metszespont kozul melyiket valasszuk
lsp=l-sign(R)*s
x1=r0[0]+lsp*be[0]
y1=r0[1]+lsp*be[1]
rp=array([x1,y1]) # a kor es az egyenes metszespontja
tmp=-sign(R)*(cent-array([x1,y1]))
normal=tmp/sqrt(dot(tmp,tmp))
return(rp,normal)
def tores_gomb(n2,n1,r0,be,cent,R):
'''
tores gorbult feluleten
'''
(rp,normal) = line_circle(r0,be,cent,R)
ki=SD(n2,n1,be,normal)
return(rp,ki)
def rajz_kor(R,cent,fimin,fimax, szin):
# a lencse alakja
Np = 100
#plot([0,0],[R,-R],color=szin, lw=1)
fi=linspace(fimin,fimax,Np)
plot(cent[0]+R*cos(fi),cent[1]+R*sin(fi), color=szin, lw=1)
n1,n2 = (1,3/2)
R1=1
cent1=array([0,0]) # cent: a 1. kor kozeppontja
R2=-1
cent2=array([-1.*abs(R2),0]) # cent: a 2. kor kozeppontja
r0=array([-2.*R1,0.3*abs(R1)]) # r0=(x0,y0) a bejovo sugar kezdo pontjanak koordinatai
be_szog= 0*pi/180 # 15*pi/180
be=array([cos(be_szog),sin(be_szog)]) # be : bejovo sugar iranyvektora (unit vector)
###### ennyi a szamolas ###################
r1,ki1=tores_gomb(n2,n1,r0,be,cent1,R1)
r2,ki2=tores_gomb(n1,n2,r1,ki1,cent2,R2)
###### ennyi a szamolas -- vege ###################
# abra rajzolas:
f0=60*pi/180
figsize(16,12)
#ax=subplot(aspect='equal')
rajz_kor(R1,cent1,pi-f0,pi+f0,'r')
rajz_kor(abs(R2),cent2,-f0,f0,'r')
hlines(y=0., xmin=-2*R1, xmax=1.5*abs(R2), lw=1, color='k',linestyle='--')
plot([r0[0],r1[0]],[r0[1],r1[1]],color='b');
plot([r1[0],r2[0]],[r1[1],r2[1]],color='b');
tmax=1.5
rkint=r2+tmax*ki2
plot([r2[0],rkint[0]],[r2[1],rkint[1]],color='b');
#ax.set_axis_off()
ff= n1*R1/(n2**2-n1**2)
axvline(x=ff, ymin=-10, ymax=10,lw=1,color='k',linestyle='--');
text(cent1[0],cent1[1], r'$\mathrm{O}=\mathrm{O}_1$', horizontalalignment='center', fontsize=20)
text(cent2[0],cent2[1], r'$\mathrm{O}_2$', horizontalalignment='center', fontsize=20)
text(cent2[0],0.75, r'$n_1=$'+ str(n1), horizontalalignment='center', fontsize=20)
text(-0.5,0.5, r'$n_2=$'+ str(n2), horizontalalignment='center', fontsize=20)
text(cent1[0],0.75, r'$n_1=1$', horizontalalignment='center', fontsize=20)
V1=-R1 # a lencse bal szelenek koordinataja
V2=0 # a lencse jobb szelenek koordinataja
kitengely= (r2[0]-r2[1]*ki2[0]/ki2[1])-V2
# numerikus eredmenyek kiiratasa:
print("r0 kezdőpont = ",r0)
print("bejövő sugár irányvektora = ",be)
print("r2 kimenő pont koordinátája = ",r2)
print("kimenő sugár irányvektora = ",ki2)
print("V1 a lencse balszéle = ",V1)
print("V2 a lencse jobbszéle = ",V2)
print("t1v = V2-V1 a lencse vastagsága = ",V2-V1)
print("\n")
print("A kilépő sugár szögének szinusz = ",sin(arctan(ki2[1]/ki2[0])),"\n")
print("A kilépő sugár tengellyel való metszéspontjának \ntávolsága a lencse jobb oldalától mérve = ",
kitengely,"\n")
print("A fókusz a lencse jobb szélétől mérve (paraxiális közelítésben) = ",ff)
gca().set_aspect('equal')
grid();
def egy_lencse(be_szog, r0,n1,R1,cent1,n2,R2,cent2,szin):
#r0=array([-2.*R1,0.2*abs(R1)]) # r0=(x0,y0) a bejovo sugar kezdo pontjanak koordinatai
#n1,n2 = (1,3/2)
#R1=1
#cent1=array([0,0]) # cent: a 1. kor kozeppontja
#R2=-1
#cent2=array([-1.*abs(R2),0]) # cent: a 2. kor kozeppontja
be=array([cos(be_szog),sin(be_szog)]) # be : bejovo sugar iranyvektora (unit vector)
###### ennyi a szamolas ###################
r1,ki1=tores_gomb(n2,n1,r0,be,cent1,R1)
r2,ki2=tores_gomb(n1,n2,r1,ki1,cent2,R2)
###### ennyi a szamolas -- vege ###################
# abra rajzolas:
f0=60*pi/180
figsize(14,10)
#ax=subplot(aspect='equal')
rajz_kor(R1,cent1,pi-f0,pi+f0,'r')
rajz_kor(abs(R2),cent2,-f0,f0,'r')
hlines(y=0., xmin=-2*R1, xmax=1, lw=1, color='k',linestyle='--')
plot([r0[0],r1[0]],[r0[1],r1[1]],color=szin);
plot([r1[0],r2[0]],[r1[1],r2[1]],color=szin);
tmax=1.2
rkint=r2+tmax*ki2
plot([r2[0],rkint[0]],[r2[1],rkint[1]],color=szin);
#ax.set_axis_off()
#xlim(0,0.6)
#ylim(-0.3,0.3)
#text(cent1[0],cent1[1], r'$\mathrm{O}=\mathrm{O}_1$', horizontalalignment='center', fontsize=20)
#text(cent2[0],cent2[1], r'$\mathrm{O}_2$', horizontalalignment='center', fontsize=20)
#text(cent2[0],0.75, r'$n_1=1$', horizontalalignment='center', fontsize=10)
#text(-0.5,-0.5, r'$n_2=1.5$', horizontalalignment='center', fontsize=10)
#text(cent1[0],0.75, r'$n_1=1$', horizontalalignment='center', fontsize=10)
V1=-R1 # a lencse bal szelenek koordinataja
V2=0 # a lencse jobb szelenek koordinataja
kitengely= (r2[0]-r2[1]*ki2[0]/ki2[1])-V2
gca().set_aspect('equal')
grid();
n1,n2 = (1,3/2)
R1=1
cent1=array([0,0]) # cent: a 1. kor kozeppontja
R2=-1
cent2=array([-1.*abs(R2),0]) # cent: a 2. kor kozeppontja
r0=array([-2.0,-0.2]) # r0=(x0,y0) a bejovo sugar kezdo pontjanak koordinatai
Np=10
beszogvec= linspace(-5,20,Np)
#for szog in beszogvec:
# szog = szog*pi/180
# egy_lencse(szog, r0,n1,R1,cent1,n2,R2,cent2,'darkorange')
yvec=linspace(-0.14,0.14,Np)
for y in yvec:
r0=array([-2,y])
szog = 0*pi/180
egy_lencse(szog, r0,n1,R1,cent1,n2,R2,cent2,'b')
yvec=linspace(-0.25,0.,Np)
for y in yvec:
r0=array([-2,y])
szog = 10*pi/180
egy_lencse(szog, r0,n1,R1,cent1,n2,R2,cent2,'g')
plot([-2,1.5], [0, 0],lw=2,color='k',linestyle='--');
ff= n1*R1/(n2**2-n1**2)
plot([ff,ff], [-0.5, 0.5],lw=1,color='k',linestyle='--');
print("A fókusz a lencse jobb szélétől mérve (paraxiális közelítésben) = ",ff)
grid();
#show()
n1,n2 = (1,3/2)
R1=1
cent1=array([0,0]) # cent: a 1. kor kozeppontja
R2=-1
cent2=array([-1.9*abs(R2),0]) # cent: a 2. kor kozeppontja
V2=cent2[0]+abs(R2)
r0=array([-2.0,-0.2]) # r0=(x0,y0) a bejovo sugar kezdo pontjanak koordinatai
Np=10
yvec=linspace(-0.1,0.1,Np)
for y in yvec:
r0=array([-2,y])
szog = 0*pi/180
egy_lencse(szog, r0,n1,R1,cent1,n2,R2,cent2,'b')
f=0.983050847457627
print("A fókusz a lencse jobb szélétől mérve (paraxiális közelítésben) = ",f)
plot([f+V2,f+V2],[-0.2,0.2], lw=1, color='k',linestyle='--') # fokusztavolsag
#xlim(0.,0.5)
#ylim(-0.15,0.15)
grid()
show();
n1,n2 = (1,3/2)
R1=1
cent1=array([0,0]) # cent: a 1. kor kozeppontja
R2=-1
cent2=cent1 # cent: a 2. kor kozeppontja
r0=array([-2.*R1,0.25*abs(R1)]) # r0=(x0,y0) a bejovo sugar kezdo pontjanak koordinatai
be_szog= 0*15*pi/180
be=array([cos(be_szog),sin(be_szog)]) # be : bejovo sugar iranyvektora (unit vector)
###### ennyi a szamolas ###################
r1,ki1=tores_gomb(n2,n1,r0,be,cent1,R1)
r2,ki2=tores_gomb(n1,n2,r1,ki1,cent2,R2)
###### ennyi a szamolas -- vege ###################
# abra rajzolas:
f0=90*pi/180
figsize(16,12)
ax=subplot(aspect='equal')
rajz_kor(R1,cent1,pi-f0,pi+f0,'r')
rajz_kor(abs(R2),cent2,-f0,f0,'r')
ax.hlines(y=0., xmin=-2*R1, xmax=2.5, lw=1, color='k',linestyle='--')
plot([r0[0],r1[0]],[r0[1],r1[1]],color='b');
plot([r1[0],r2[0]],[r1[1],r2[1]],color='b');
tmax=2.
rkint=r2+tmax*ki2
plot([r2[0],rkint[0]],[r2[1],rkint[1]],color='b');
f=R1*n2/(2*n1)/(n2-n1) # paraxialis kozelitesben, matrixokkal szamolva jobb fosiktol merve: f= R*n2/(2*n1)/(n2-n1)
h1=R1/n1 # bal fosik
h2=h1 # jobb fosik
plot([f,f],[-0.2,0.2], lw=2, color='k',linestyle='--') # fokusztavolsag
text(f,-0.4, r'$f=\frac{R}{2}\,\frac{n_2}{n_1 \left(n_2-n_1\right)}-\frac{R}{n_1}$',
horizontalalignment='center', fontsize=16)
text(f,-0.6, r' lencse szélétől mérve',
horizontalalignment='center', fontsize=16)
plot([h1-R1,h1-R1],[-0.2,0.2], lw=2, color='k',linestyle='--') # bal fosik
text(h1-R1,-0.4, r'$h_1=h_2=-\frac{R}{n_1}$', horizontalalignment='center', fontsize=16)
#plot([h2-R1,h2-R1],[-0.2,0.2], lw=2, color='k',linestyle='--') # bal fosik
#text(h2-R1,-0.8, r'$h_1=h_2=-\frac{R}{n_1}$', horizontalalignment='center', fontsize=16)
#text(cent1[0],cent1[1], r'$\mathrm{O}=\mathrm{O}_1$', horizontalalignment='center', fontsize=20)
#text(cent2[0],cent2[1], r'$\mathrm{O}_2$', horizontalalignment='center', fontsize=20)
text(-1.5,0.75, r'$n_1=1$', horizontalalignment='center', fontsize=16)
text(0.,0.5, r'$n_2=1.5$', horizontalalignment='center', fontsize=16)
#text(cent1[0],0.75, r'$n_1=1$', horizontalalignment='center', fontsize=10)
V1=-R1 # a lencse bal szelenek koordinataja
V2=R1 # a lencse jobb szelenek koordinataja
kitengely= (r2[0]-r2[1]*ki2[0]/ki2[1])-V2
# numerikus eredmenyek kiiratasa:
print("r0 kezdőpont = ",r0)
print("bejövő sugár irányvektora = ",be)
print("r2 kimenő pont koordinátája = ",r2)
print("kimenő sugár irányvektora = ",ki2)
print("V1 a lencse balszéle = ",V1)
print("V2 a lencse jobbszéle = ",V2)
print("t1v = V2-V1 a lencse vastagsága = ",V2-V1)
print("\n")
print("A kilépő sugár szögének szinusz = ",sin(arctan(ki2[1]/ki2[0])),"\n")
print("A kilépő sugár tengellyel való metszéspontjának \ntávolsága a lencse jobb szélétől mérve = ",
kitengely,"\n")
print("Fokusztávolsága a lencse jobb/bal fősíktól mérve (paraxiális közelítésben) = ", f,"\n")
print("A fókusz a lencse jobb szélétől mérve (paraxiális közelítésben) = ",f-h1)
print("Baloldali fősík a lencse bal oldalától mérve = ", h1,"\n")
print("Jobboldali fősík a lencse bal oldalától mérve = ", h2,"\n")
#ax.set_axis_off()
grid()
n1,n2 = (1,4/3)
R1=1
cent1=array([0,0]) # cent: a 1. kor kozeppontja
R2=-R1
cent2=cent1 # cent: a 2. kor kozeppontja
r0=array([-2.0,-0.2]) # r0=(x0,y0) a bejovo sugar kezdo pontjanak koordinatai
Np=10
beszogvec= linspace(-5,20,Np)
for szog in beszogvec:
szog = szog*pi/180
egy_lencse(szog, r0,n1,R1,cent1,n2,R2,cent2,'b')
yvec=linspace(-0.2,0.2,Np)
for y in yvec:
r0=array([-2,y])
egy_lencse(.0, r0,n1,R1,cent1,n2,R2,cent2,'darkcyan')
grid();
A. Nussbaum & R. A. Phillips: Modern optika mérnököknek és kutatóknak (Műszaki Könykiadó, 1982.), 45. oldal, 2-4. ábra.
A 46. oldal alján a FORTRAN program futásának eredménye (a kilépő sugár szögének szinusza és a kilépő sugár tengellyel való metszéspontjának távolsága a lencse jobb oldalától mérve) pontosan egyezik az alábbi számolással.
n1,n2 = (1,3/2)
R1=50
cent1=array([0,0]) # cent: a 1. kor kozeppontja
R2=-R1
t1v=15 # a lencse vastagsaga.
cent2=array([t1v-R1-abs(R2),0]) # cent: a 2. kor kozeppontja
r0=array([-200-R1,0]) # r0=(x0,y0) a bejovo sugar kezdo pontjanak koordinatai
be_szog= arcsin(0.1)
be=array([cos(be_szog),sin(be_szog)]) # be : bejovo sugar iranyvektora (unit vector)
###### ennyi a szamolas ###################
r1,ki1=tores_gomb(n2,n1,r0,be,cent1,R1)
r2,ki2=tores_gomb(n1,n2,r1,ki1,cent2,R2)
###### ennyi a szamolas -- vege ###################
# abra rajzolas:
f0=50*pi/180
figsize(16,16)
ax=subplot(aspect='equal')
rajz_kor(R1,cent1,pi-f0,pi+f0,'r')
rajz_kor(abs(R2),cent2,-f0,f0,'r')
ax.hlines(y=0., xmin=-250, xmax=25, lw=1, color='k',linestyle='--')
plot([r0[0],r1[0]],[r0[1],r1[1]],color='b');
plot([r1[0],r2[0]],[r1[1],r2[1]],color='b');
tmax=100
rkint=r2+tmax*ki2
plot([r2[0],rkint[0]],[r2[1],rkint[1]],color='b');
text(cent1[0],cent1[1], r'$\mathrm{O}=\mathrm{O}_1$', horizontalalignment='center', fontsize=20)
text(cent2[0],cent2[1], r'$\mathrm{O}_2$', horizontalalignment='center', fontsize=20)
text(-60,-15., r'$n_1=1$', horizontalalignment='center', fontsize=10)
text(-42.,-8., r'$n_2=1.5$', horizontalalignment='center', fontsize=10)
text(-28,-15, r'$n_1=1$', horizontalalignment='center', fontsize=10)
xlim(-260,25)
ylim(-30,30)
#ax.set_axis_off()
V1=-R1 # a lencse bal szelenek koordinataja
V2=-(R1-t1v) # a lencse jobb szelenek koordinataja
kitengely= (r2[0]-r2[1]*ki2[0]/ki2[1])-V2
text(V1,0, r'$\mathrm{V}_1$', horizontalalignment='center', fontsize=20)
text(V2,0, r'$\mathrm{V}_2$', horizontalalignment='center', fontsize=20)
axvline(x=0, lw=1,color='k',linestyle='--')
axvline(x=cent2[0], ymin=-20, ymax=20,lw=1,color='k',linestyle='--')
# numerikus eredmenyek kiiratasa:
print("r0 kezdőpont = ",r0)
print("bejövő sugár irányvektora = ",be)
print("r2 kimenő pont koordinátája = ",r2)
print("kimenő sugár irányvektora = ",ki2)
print("V1 a lencse balszéle = ",V1)
print("V2 a lencse jobbszéle = ",V2)
print("t1v = V2-V1 a lencse vastagsága = ",V2-V1)
print("\nAz alábbi eredmény egyezik a Nussbaum & Phillips könyvbelivel!\n")
print("A kilépő sugár szögének szinusz = ",sin(arctan(ki2[1]/ki2[0])),"\n")
print("A kilépő sugár tengellyel való metszéspontjának \ntávolsága a lencse jobb oldalától mérve = ",
kitengely,"\n")
The Zeiss Tessar is a famous photographic lens, invented in 1902 by Paul Rudolph of the Carl Zeiss optical company.
Számolás részletei*: Eugene Hecht: Optics (4th Edition, 2002), lásd még: pp. 250-251, figure 6.10
*This particular example was chosen primarily because Nussbaum's book Geometric Optics contains a simple Fortran computer program written specifically for this lens. It would be almost silly to evaluate the system matrix by hand.
Az ábra, a lencsék paraméterei és a köztük lévő távolságok itt: A. Nussbaum & R. A. Phillips: Modern optika mérnököknek és kutatóknak (Műszaki Könykiadó, 1982.), 39. oldal, 1-19. ábra és alatta a táblázat.
# toresmutatok, gorbuleti sugarak, lencsek kozti tavolsag (az optikai tengelyen):
ni = (1.6116, 1.6053, 1.5123, 1.6116) # a lencsek toresmutatoi
Ri = (1.628, -27.57, -3.457, 1.582, 10000000, 1.920, -2.4) # a lencsek gorbuleti sugarai
di = (0.357, 0.189, 0.081, 0.325, 0.217, 0.396) # lencsek kozti tavolsagok
# a lencsek kozeppontjai:
cent1=array([0,0])
cent2=array([di[0]-Ri[0]-abs(Ri[1]),0])
cent3=array([di[1]+abs(Ri[1])-abs(Ri[2])+cent2[0],0])
cent4=array([di[2]+abs(Ri[2])+abs(Ri[3])+cent3[0],0])
vert5=di[3]+cent4[0]-abs(Ri[3])
cent6=array([di[4]+abs(Ri[5])+vert5,0])
cent7=array([di[5]+cent6[0]-abs(Ri[5])-abs(Ri[6]),0])
cent2,cent3,cent4, vert5, cent6, cent7
V1, V2, V3, V4, V5, V6, V7 =cent1[0]-abs(Ri[0]),cent2[0]+abs(Ri[1]), cent3[0]+abs(Ri[2]), cent4[0]-abs(Ri[3]), vert5, cent6[0]-abs(Ri[5]), cent7[0]+abs(Ri[6])
V1,V2, V3, V4, V5, V6, V7
V2-V1, V3-V2, V4-V3,V5-V4, V6-V5, V7-V6
def Tessar_raytracing(be_szog, r0,szin):
'''
Tessar lencse sugarmenete
'''
# numerika
#r0=array([-2,0.1]) # r0=(x0,y0) a bejovo sugar kezdo pontjanak koordinatai
#r0=array([-2,-1.1]) # r0=(x0,y0) a bejovo sugar kezdo pontjanak koordinatai
#be_szog= 10*pi/180
be=array([cos(be_szog),sin(be_szog)]) # be : bejovo sugar iranyvektora (unit vector)
r1,ki1=tores_gomb(ni[0],1,r0,be,cent1,Ri[0])
r2,ki2=tores_gomb(1,ni[0],r1,ki1,cent2,Ri[1])
r3,ki3=tores_gomb(ni[1],1,r2,ki2,cent3,Ri[2])
r4,ki4=tores_gomb(1,ni[1],r3,ki3,cent4,Ri[3])
r5= array([vert5,r4[1]+ki4[1]/ki4[0]*(vert5-r4[0])])
ki5 = SD(ni[2],1,ki4,array([-1,0]))
#(r6,normal) = line_circle(r5,ki5,cent6,Ri[5])
r6,ki6=tores_gomb(ni[3],ni[2],r5,ki5,cent6,Ri[5])
r7,ki7=tores_gomb(1,ni[3],r6,ki6,cent7,Ri[6])
figsize(16,14)
#ax=subplot(aspect='equal')
# fenysugarak rajzolasa
plot([r0[0],r1[0]],[r0[1],r1[1]],color=szin);
plot([r1[0],r2[0]],[r1[1],r2[1]],color=szin);
plot([r2[0],r3[0]],[r2[1],r3[1]],color=szin);
plot([r3[0],r4[0]],[r3[1],r4[1]],color=szin);
plot([r4[0],r5[0]],[r4[1],r5[1]],color=szin);
plot([r5[0],r6[0]],[r5[1],r6[1]],color=szin);
plot([r6[0],r7[0]],[r6[1],r7[1]],color=szin);
tmax=5
rkint=r7+tmax*ki7
plot([r7[0],rkint[0]],[r7[1],rkint[1]],color=szin);
#plot([cent3[0],r3[0]],[cent3[1],r3[1]],'--')
#plot([cent7[0],r7[0]],[cent7[1],r7[1]],'--')
## lencsek rajzolasa
f0=pi/180
rajz_kor(Ri[0],cent1,pi-21.63*f0,pi+21.63*f0,'r')
rajz_kor(abs(Ri[1]),cent2,-1.247*f0,1.247*f0,'r')
rajz_kor(abs(Ri[2]),cent3,-6.65*f0,6.65*f0,'r')
rajz_kor(abs(Ri[3]),cent4,pi-14.64*f0,pi+14.64*f0,'r')
plot([vert5,vert5],[-0.4,0.4], color='r')
rajz_kor(abs(Ri[5]),cent6,pi-12*f0,pi+12*f0,'r')
rajz_kor(abs(Ri[6]),cent7,-9.5*f0,9.5*f0,'r')
plot([cent1[0]+abs(Ri[0])*cos(pi-21.63*f0),cent2[0]+abs(Ri[1])*cos(1.247*f0)],[0.6,0.6], color='r')
plot([cent1[0]+abs(Ri[0])*cos(pi-21.63*f0),cent2[0]+abs(Ri[1])*cos(1.247*f0)],[-0.6,-0.6], color='r')
plot([cent3[0]+abs(Ri[2])*cos(6.65*f0),cent4[0]+abs(Ri[3])*cos(pi-14.64*f0)],[0.4,0.4], color='r')
plot([cent3[0]+abs(Ri[2])*cos(6.65*f0),cent4[0]+abs(Ri[3])*cos(pi-14.64*f0)],[-0.4,-0.4], color='r')
plot([vert5,cent7[0]+abs(Ri[6])*cos(9.5*f0)],[0.4,0.4], color='r')
plot([vert5,cent7[0]+abs(Ri[6])*cos(9.5*f0)],[-0.4,-0.4], color='r')
#plot([-2,1],[0,0],'k--')
hlines(y=0., xmin=r0[0], xmax=5, lw=1, color='k',linestyle='--')
axvline(x=0, ymin=-10, ymax=10,lw=1,color='k',linestyle='--');
axvline(x=4.406096902985778, ymin=-10, ymax=10,lw=1,color='k',linestyle='--');
xlim(-2.,6.0);
gca().set_aspect('equal')
#grid();
#print(r7,ki7)
Np=7
be_szog=0*pi/180
r0y=linspace(-0.4,0.4,Np)
for y0 in r0y:
Tessar_raytracing(be_szog, array([-2,y0]),'b')
Np=5
be_szog=10*pi/180
r0y=linspace(-0.6,0.6,Np)
for y0 in r0y:
Tessar_raytracing(be_szog, array([-2,y0]),'lime')
#show();
Np=5
be_szog_vec=linspace(-5,5,Np)
for szog in be_szog_vec:
be_szog= szog*pi/180
Tessar_raytracing(be_szog, array([-10,0.15]),'b')
Np=5
be_szog_vec=linspace(-5,5,Np)
for szog in be_szog_vec:
be_szog= szog*pi/180
Tessar_raytracing(be_szog, array([-2,0.15]),'b')
def Tessar_fokusz(be_szog, r0):
'''
Tessar lencse fokustavolsaga,
vizszintesen bejovo (parhuzamos) suagarak a fokuszpontba talalkoznak.
'''
#r0=array([-2,0.2]) # r0=(x0,y0) a bejovo sugar kezdo pontjanak koordinatai
#be_szog= 0*pi/180
be=array([cos(be_szog),sin(be_szog)]) # be : bejovo sugar iranyvektora (unit vector)
r1,ki1=tores_gomb(ni[0],1,r0,be,cent1,Ri[0])
r2,ki2=tores_gomb(1,ni[0],r1,ki1,cent2,Ri[1])
r3,ki3=tores_gomb(ni[1],1,r2,ki2,cent3,Ri[2])
r4,ki4=tores_gomb(1,ni[1],r3,ki3,cent4,Ri[3])
r5= array([vert5,r4[1]+ki4[1]/ki4[0]*(vert5-r4[0])])
ki5 = SD(ni[2],1,ki4,array([-1,0]))
#(r6,normal) = line_circle(r5,ki5,cent6,Ri[5])
r6,ki6=tores_gomb(ni[3],ni[2],r5,ki5,cent6,Ri[5])
r7,ki7=tores_gomb(1,ni[3],r6,ki6,cent7,Ri[6])
f= (r7[0]*ki7[1]-r7[1]*ki7[0])/ki7[1]-V7 # az utolso lencsetol merve
#print("v7-r7[0]= ",V7,r7[0], V7-r7[0])
return( f)
Np=20
be_szog= 0*pi/180
r0y=linspace(-0.1,0.1,Np)
[(y0,Tessar_fokusz(be_szog, array([-2,y0]))) for y0 in r0y]
y0=0.001
Tessar_fokusz(be_szog, array([-2,y0]))
be_szog= 0*pi/180
Np=100
r0y=linspace(-0.8,0.6,Np)
f=[]
for y0 in r0y:
f.append(Tessar_fokusz(be_szog, array([-2,y0])))
fig, ax = plt.subplots(figsize=(12,6))
ax.plot(r0y, f, 'r');
hlines(y=4.406096902985778, xmin=r0y[0], xmax=r0y[-1], lw=1, color='k',linestyle='--')
xlabel(r'$y_0$', fontsize=20,rotation=0,labelpad=10)
ylabel('f', fontsize=20,rotation=0,labelpad=20)
#ylim(4.4,4.41)
grid();
figsize(10,6)
plot(r0y, f, 'r');
hlines(y=4.406096902985778, xmin=r0y[0], xmax=r0y[-1], lw=1, color='k',linestyle='--')
xlabel(r'$y_0$', fontsize=20,rotation=0,labelpad=10)
ylabel('f', fontsize=20,rotation=0,labelpad=20)
ylim(4.4,4.407)
grid();